package cn.iocoder.yudao.module.wine.service.supplyorder;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.wine.controller.admin.supplyorder.vo.*;
import cn.iocoder.yudao.module.wine.controller.app.supplyinfo.vo.AppCreateOrderReqVO;
import cn.iocoder.yudao.module.wine.controller.app.supplyorder.vo.*;
import cn.iocoder.yudao.module.wine.dal.dataobject.supplyorder.SupplyOrderDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * 供求订单管理 Service 接口
 *
 * @author 管理员
 */
public interface SupplyOrderService {

    /**
     * 创建供求订单管理
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createSupplyOrder(@Valid SupplyOrderSaveReqVO createReqVO);

    /**
     * 更新供求订单管理
     *
     * @param updateReqVO 更新信息
     */
    void updateSupplyOrder(@Valid SupplyOrderSaveReqVO updateReqVO);

    //支付担保费后更新
    void payUpdateSupplyOrder(SupplyOrderDO supplyOrderDO,Long curTenantId,Long payUserId);
    /**
     * 删除供求订单管理
     *
     * @param id 编号
     */
    void deleteSupplyOrder(Long id);

    /**
     * 获得供求订单管理
     *
     * @param id 编号
     * @return 供求订单管理
     */
    SupplyOrderDO getSupplyOrder(Long id);

    /**
     * 获得供求订单管理分页
     *
     * @param pageReqVO 分页查询
     * @return 供求订单管理分页
     */
    PageResult<SupplyOrderDO> getSupplyOrderPage(SupplyOrderPageReqVO pageReqVO);
    /**
     * 获得供求订单管理分页
     *
     * @param pageReqVO 分页查询
     * @return 供求订单管理分页
     */
    PageResult<SupplyOrderRespVO> getSupplyOrderNewPage(SupplyOrderPageReqVO pageReqVO);

    /**
     * 修改订单状态 同时记录订单日志
     * @param updateReqVO
     */
    void updateSupplyOrderStatus(SupplyOrderSaveReqVO updateReqVO);

    /**
     * 取消订单
     * @param id
     * @return
     */
    void cancelOrder(Long id);

    /**
     *
     * @param listReqVO
     * @return
     */
    List<AppSupplyOrderRespVO> selectOrderList(AppSupplyOrderListReqVO listReqVO);

    /**
     * 小程序订单退货
     * @param reqVO
     * @return
     */
    Long salesReturn(AppSalesReturnReqVO reqVO);

    /**
     * 小程序创建普通订单
     * @param reqVO
     * @return
     */
    Boolean placeAnOrder(AppCreateOrderReqVO reqVO);


    /**
     * app获取订单详情
     * @param id
     * @return
     */
    AppSupplyOrderRespVO appGetSupplyOrder(Long id);

    /**
     * 卖家提交发货、买家提交退货、更新订单完成 使用
     * @param reqVO
     * @return
     */
    Long appUpdateSupplyOrder(AppSupplyOrderUpdateReqVO reqVO);

    Long confirmReceipt(AppSalesReturnReqVO reqVO);

    Long affirmDuty(AppAffirmDutyReqVO reqVO);

    SupplyOrderRespVO getSupplyOrderInfo(Long id);

    Long salesAudit(AppSalesAuditReqVO reqVO);

    /**
     * 取消订单
     * @param reqVO
     * @return
     */
    Long cancel(AppCancelReqVO reqVO);

    Long salesConfirm(AppSalesConfirmReqVO reqVO);
}
